<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of persistenciaFuncionario
 *
 * @author Agustin
 */
require_once 'funcionario.php';
require_once 'conexion.php';
require_once 'persistenciaTelefono.php';
require_once 'persistenciaEspecialidad.php';

class PersistenciaFuncionario {

    private static $instance = false;

    public static function getInstance() {
        if (!self::$instance instanceof self) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    public function crearFuncionario($datos) {
        try {
            $db = Conexion::getInstance();
            $sentencia = "INSERT INTO funcionarios (ci,nombre,direccion,apellido,idEspecialidad) VALUES(" . $datos[0] . ",'" . $datos[1] . "','" . $datos[2] . "','" . $datos[3] . "'," . $datos[4] . ")";
            $db->consulta($sentencia);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function agregarTelefonoFuncionario($dato) {
        try {
            $pT = PersistenciaTelefono::getInstance();
            foreach ($dato[0] as $numero) {
                $datos = array($numero[2], $dato[1]);
                $pT->crearTelefono($numero[2]);
                $pT->crearTelefonoFuncionario($datos);
            }
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function borrarOrdenFidelizarFuncionario($numero) {
        $query = "delete from ordenesfidelizarfuncionarios where numero=" . $numero;
        $con = Conexion::getInstance();
        $con->consulta($query);
    }

    public function agregarOrdenFuncionario($datos, $fidelizar) {
        try {
            $db = Conexion::getInstance();
            if ($fidelizar) {
                $sentencia = "INSERT INTO ordenesfidelizarfuncionarios (numero,ci) VALUES('" . $datos[0] . "','" . $datos[1] . "')";
            } else {
                $sentencia = "INSERT INTO ordenesfuncionarios (numero,ci) VALUES('" . $datos[0] . "','" . $datos[1] . "')";
            }

            $consulta = $db->consulta($sentencia);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function buscarFuncionariosOrden($numero) {
        try {
            $db = Conexion::getInstance();
            $pT = PersistenciaTelefono::getInstance();
            $pE = persistenciaEspecialidad::getInstance();
            $funcionarios = array();
            $sentencia = "SELECT *FROM funcionarios WHERE ci in (select ci from ordenesfuncionarios where numero = " . $numero . ")";
            $aux = $db->consulta($sentencia);
            foreach ($aux as $funcionario) {
                $fun = new Funcionario(null);
                $fun->ci = $funcionario[0];
                $fun->nombre = $funcionario[1];
                $fun->direccion = $funcionario[2];
                $fun->apellido = $funcionario[3];
                $fun->telefonos = $pT->traerTelefonosFuncionarios($fun->ci);
                $espec = $pE->traerEspecialidades($funcionario[4]);
                $fun->especialidad = $espec[0];
                array_push($funcionarios, $fun);
            }
            return $funcionarios;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function buscarFuncionariosOrdenFidelizar($numero) {
        try {
            $db = Conexion::getInstance();
            $pT = PersistenciaTelefono::getInstance();
            $funcionarios = array();
            $sentencia = "SELECT *FROM funcionarios WHERE ci in (select ci from ordenesfidelizarfuncionarios where numero = " . $numero . ")";
            $aux = $db->consulta($sentencia);
            foreach ($aux as $funcionario) {
                $fun = new Funcionario(null);
                $fun->ci = $funcionario[0];
                $fun->nombre = $funcionario[1];
                $fun->direccion = $funcionario[2];
                $fun->apellido = $funcionario[3];
                $fun->telefonos = $pT->traerTelefonosFuncionarios($fun->ci);
                $fun->especialidad = $funcionario[4];
                array_push($funcionarios, $fun);
            }
            return $funcionarios;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerFuncionarios($ci) {
        try {
            $db = Conexion::getInstance();
            $pT = PersistenciaTelefono::getInstance();
            $pE = persistenciaEspecialidad::getInstance();
            $funcionarios = array();
            if ($ci == "") {
                $sentencia = "SELECT * FROM funcionarios order by idespecialidad, ci";
                $aux = $db->consulta($sentencia);
                foreach ($aux as $funcionario) {
                    $fun = new Funcionario(null);
                    $fun->ci = $funcionario[0];
                    $fun->nombre = $funcionario[1];
                    $fun->direccion = $funcionario[2];
                    $fun->apellido = $funcionario[3];
                    $fun->telefonos = $pT->traerTelefonosFuncionarios($fun->ci);
                    $espec = $pE->traerEspecialidades($funcionario[4]);
                    $fun->especialidad = $espec;
                    array_push($funcionarios, $fun);
                }
            } else {
                $sentencia2 = "SELECT *FROM funcionarios WHERE ci=" . $ci;
                $aux = $db->consulta($sentencia2);
                if (count($aux) > 0) {
                    $fun = new Funcionario(null);
                    $fun->ci = $aux[0][0];
                    $fun->nombre = $aux[0][1];
                    $fun->direccion = $aux[0][2];
                    $fun->apellido = $aux[0][3];
                    $fun->telefonos = $pT->traerTelefonosFuncionarios($fun->ci);
                    $espec = $pE->traerEspecialidades($aux[0][4]);
                    $fun->especialidad = $espec;
                    array_push($funcionarios, $fun);
                } else {
                    return null;
                }
            }
            return $funcionarios;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerFuncionariosOrdenes($numero) {
        try {
            $db = Conexion::getInstance();
            $pT = PersistenciaTelefono::getInstance();
            $funcionarios = array();
            $sentencia2 = "select * from funcionarios where ci in (select ci from ordenesfuncionarios where numero=" . $numero . ")";
            $aux = $db->consulta($sentencia2);
            foreach ($aux as $funcionario) {
                $fun = new Funcionario(null);
                $fun->ci = $funcionario[0];
                $fun->nombre = $funcionario[1];
                $fun->direccion = $funcionario[2];
                $fun->apellido = $funcionario[3];
                $fun->telefonos = $pT->traerTelefonosFuncionarios($fun->ci);
                $fun->especialidad = $funcionario[4];
                array_push($funcionarios, $fun);
            }
            return $funcionarios;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function actualizarFuncionario($datos) {
        try {
            $db = Conexion::getInstance();
            $sentencia = "UPDATE funcionarios SET nombre='" . $datos[1] . "',direccion='" . $datos[2] . "',apellido='" . $datos[3] . "', idEspecialidad = " . $datos[4] . " WHERE ci=" . $datos[0];
            $consulta = $db->consulta($sentencia);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function actualizarFuncionarioOrdenes($datos) {
        try {
            $db = Conexion::getInstance();
            $sentencia = "DELETE FROM ordenesfuncionarios WHERE numero=" . $datos[0];
            $consulta = $db->consulta($sentencia);
            foreach ($datos[1] as $fun) {
                $sentencia2 = "INSERT INTO ordenesfuncionarios (numero,ci) VALUES (" . $datos[0] . "," . $fun . ")";
                $consulta = $db->consulta($sentencia2);
            }
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function eliminarFuncionario($ci) {
        try {
            $db = Conexion::getInstance();
            $sentencia = "DELETE  FROM funcionarios WHERE ci=" . $ci;
            $sentenciatels = "delete from telefonos where idTelefono in (select idTelefono from funcionariostelefonos where idFuncionario=" . $ci . "); 
                delete from funcionariostelefonos where idFuncionario =" . $ci;
            $sentenciausuarios="delete from usuarios where idPersona=".$ci;
            $db->consulta($sentenciausuarios);
            $db->consulta($sentenciatels);
            $db->consulta($sentencia);
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

    public function traerCantidadHorasFuncionarioEspecialidad($idespec) {
        try {
            $db = Conexion::getInstance();
            $sentencia = "Select ci from funcionarios where idEspecialidad = " . $idespec;
            $consulta = $db->consulta($sentencia);
            return count($consulta) * 4;
        } catch (Exception $exc) {
            echo $exc->getTraceAsString();
        }
    }

}

?>
